CloudWatch Synthetics で VPC のプライベートエンドポイントのモニタリングをしてみた
こんにちはオンジーですぅ。
Amazon CloudWatch Synthetics は、ウェブサイトや API のエンドポイントなどに対して、利用ユーザー視点でパフォーマンスや可用性をモニタリングできます。
インターネットに公開されているサイトに対して合成監視する際は基本的にはCanaryを作成するだけなのですがVPC内部のサイトやAPIに対して監視をする際はVPCエンドポイントを作成するのに加えてちょっとした設定が必要なのでご紹介します。
構成図
事前準備
プライベートサブネットにEC2を起動してwebサーバー上に適当なトップページ(html)を用意しておきます。
やってみた
先にポイントだけ書くと
- Canary作成時に対象のVPCとサブネットを指定する
- 対象EC2でlambdaからのHTTP(S)通信のインバウンドを許可する
- VPC Endpoint のセキュリティグループでHTTPS通信のインバウンドを許可する
ということでやっていきます。
後で使うのでlambda用のセキュリティグループを作成しておきます。
インバウンドルールは不要で、アウトバウンドルールは全て許可にしておきます。
以下二つのVPC Endpointを作成します。
- com.amazonaws.{region}.monitoring
- com.amazonaws.{region}.s3
一つ目はCloudWatch メトリクス送信用で、二つ目は合成監視実行時のログをS3に保存するためです。
VPC Endpoint用のセキュリティグループではサブネット内からのHTTPSのインバウンドを許可します。
ここが唯一ハマる可能性のあるポイントなのですが対象EC2にアタッチするセキュリティグループでlambdaからのHTTP(S)をインバウンド許可しておく必要があります。
これがないと監視のための通信が届かなくなるため失敗します。
Amazon CloudWatch Synthetics のCanary作成画面にいきます。今回はシンプルに試すためハートビートの設計図を使用します。
名前と監視対象のURLを入力します。
「VPC設定」のオプションでVPC,サブネット,lambdaにアタッチするセキュリティグループを選択します。
合成監視する実体はlambdaなのですがここの設定を上記の様にしないとVPCに属さないlambdaになってしまうためプライベートなサイトの監視ができません。
他のオプションについては適宜変更してください。今回の検証では全てデフォルトで進んでます。
Canary作成が完了して少し待つと、、成功しました!
スクリーンショットのタブから事前に配置しておいたトップページも取得できてることを確認できました!
おわり
インターネットに公開しているサイトやAPIの合成監視が重要なことはもちろんですが、プライベートネットワークについても合成監視する有用性はあると思います。
例えばインターネットには公開していないがシステムのバックグラウンドで使用されているAPI、公開前のサイト、社内で使っている業務アプリケーション、などがありそうですよね。
Amazon CloudWatch Synthetics 積極的に使ってモニタリングしていきましょう!